unit clsCEP;

interface

uses Dm, dbtables, biblio, dialogs;

type
  TCEP = class(TObject)
  private
    Cep_Codigo: string;
  public
    UF: string;
    Cidade: string;
    Endereco: string;
    Logradouro: string;
    Bairro: string;
    Complemento: string;
    xCod_Cid: string; //retorna o cod. da cidade se encontrada
    function Gravar(p_CEP: string): Byte;
    function Recuperar(p_CEP: string): Byte;
    procedure Consultar(p_Tipo, p_Logr: Byte; p_End, p_Par: string; var pq: TQuery);
  end;

implementation

{ TCEP }
uses menu;

procedure TCEP.Consultar;
var
  xTipo,
    xLogr,
    xOrdem: string;
begin
  {
  +----------------------------------------------+
  | p_Tipo          | p_Logr                     |
  +----------------------------------------------+
  | 0 - Todos       | 0 - Avenida    4 - Todos   |
  | 1 - UF          | 1 - Rua                    |
  | 2 - Cidade      | 2 - Estrada                |
  |                 | 3 - Travessa               |
  +----------------------------------------------+
  }
  case p_Tipo of
    0: begin
        xTipo := ' ';
        xOrdem := ' order by Endereco, UF, Cid_Nome, Cep_Codigo';
      end;
    1: begin
        xTipo := ' and UF = ' + chr(39) + p_Par + chr(39) + ' ';
        xOrdem := ' order by Endereco, Cid_Nome, Cep_Codigo';
      end;
    2: begin
        xTipo := ' and Cid_Nome = ' + chr(39) + p_Par + chr(39) + ' ';
        xOrdem := ' order by Endereco, UF, Cep_Codigo';
      end;
  end;

  case p_Logr of
    0: xLogr := ' and Logradouro = ' + chr(39) + 'AVENIDA' + chr(39) + ' ';
    1: xLogr := ' and Logradouro = ' + chr(39) + 'RUA' + chr(39) + ' ';
    2: xLogr := ' and Logradouro = ' + chr(39) + 'ESTRADA' + chr(39) + ' ';
    3: xLogr := ' and Logradouro = ' + chr(39) + 'TRAVESSA' + chr(39) + ' ';
    4: xLogr := ' ';
  end;

  pq.Active := False;
  pq.SQL.Clear;
  pq.Params.Clear;
  pq.SQL.Add('Select * from CEP where Endereco like :End ');
  pq.SQL.Add(xTipo);
  pq.SQL.Add(xLogr);
  pq.SQL.Add(xOrdem);
  pq.ParamByName('End').AsString := '%' + p_End + '%';

end;

function TCEP.Gravar(p_CEP: string): Byte;
var
  tq: TQuery;
begin
  tq := Tquery.Create(DmInt);
  tq.databasename := dmint.Db.DatabaseName;
  tq.active := False;
  tq.sql.clear;
  tq.params.clear;
  tq.sql.add('Select * from CEP where CEP_Codigo =:a');
  tq.Params[0].AsString := tira_PT(p_CEP);
  tq.Open;
  if tq.Eof then begin
    Result := 0;
    tq.active := False;
    tq.sql.clear;
    tq.params.clear;
    tq.sql.add('Insert into CEP values(:k_Cod,:k_UF,:k_Cidade,:k_Logr, ' +
      ':k_Endereco,:k_Bairro,:k_Complemento)');

    tq.ParamByName('k_Cod').AsString := copy(tira_PT(p_CEP), 1, 8);
    tq.ParamByName('k_UF').AsString := copy(UF, 1, 2);
    tq.ParamByName('k_Cidade').AsString := copy(Cidade, 1, 25);
    tq.ParamByName('k_Logr').AsString := copy(Logradouro, 1, 20);
    tq.ParamByName('k_Endereco').AsString := copy(Endereco, 1, 50);
    tq.ParamByName('k_Bairro').AsString := copy(Bairro, 1, 50);
    tq.ParamByName('k_Complemento').AsString := copy(Complemento, 1, 50);
    try
      tq.ExecSQL;
    except
    end;
  end else begin
    {tq.active:=False;
    tq.sql.clear;
    tq.params.clear;
    tq.sql.add('Update CEP set COMPLEMENTO =:k_Complemento where Cep_Codigo =:k_Cod');
    tq.ParamByName('k_Cod').AsString        := copy(tira_PT(p_CEP),1,8);
    tq.ParamByName('k_Complemento').AsString:= copy(Complemento,1,50);
    try
     tq.ExecSQL;
    except
    end; }
  end;
  tq.close;
  tq.Free;
end;

function TCEP.Recuperar(p_CEP: string): Byte;
var
  tq: TQuery;
  tq1: TQuery;
begin
  xCod_Cid := '';
  tq := Tquery.Create(DmInt);
  tq.databasename := dmint.Db.DatabaseName;
  tq1 := Tquery.Create(DmInt);
  tq1.databasename := dmint.Db.DatabaseName;

  tq.active := False;
  tq.sql.clear;
  tq.params.clear;
  tq.sql.add('Select * from CEP where CEP_Codigo =:a');
  tq.Params[0].AsString := tira_PT(p_CEP);
  tq.Open;
  if not tq.Eof then begin
    Result := 1;
    UF := tq.FieldByName('UF').AsString;
    Cidade := tq.FieldByName('Cid_Nome').AsString;
    Logradouro := tq.FieldByName('Logradouro').AsString;
    Endereco := tq.FieldByName('Endereco').AsString;
    Bairro := tq.FieldByName('Bairro').AsString;

    tq1.active := False;
    tq1.sql.clear;
    tq1.params.clear;
    if banco_tipo = 0 then
      tq1.sql.add('Select Cid_Codigo, Trim(Cid_Nome) Cid_Nome, Trim(Est_Sigla) Est_Sigla from Cidade where Cid_Nome like :a order by Cid_Codigo, Cid_Nome')
    else
      tq1.sql.add('Select Cid_Codigo, Cid_Nome, Est_Sigla from Cidade where Cid_Nome like :a order by Cid_Codigo, Cid_Nome');
    tq1.Params[0].AsString := copy(Cidade, 1, 1) + '%';
    tq1.Open;
    while not tq1.Eof do begin
      if (tiraAcento(tq1.FieldByName('Cid_Nome').AsString) = Cidade) and (tq1.FieldByName('Est_Sigla').AsString = UF) then begin
        xCod_Cid := tq1.FieldByName('Cid_Codigo').AsString;
        break;
      end;
      tq1.Next;
    end;
  end else begin
    Result := 0;
    UF := '';
    Cidade := '';
    Logradouro := '';
    Endereco := '';
    Bairro := '';
  end;
  tq.close;
  tq.free;
end;

end.
